package com.education.ai.service;

import com.education.ai.entity.Teacher;
import com.education.ai.entity.Student;
import com.education.ai.entity.Admin;
import com.education.ai.model.dto.LoginRequest;
import com.education.ai.model.dto.ChangePasswordRequest;
import com.education.ai.model.dto.RegisterRequest;
import com.education.ai.model.dto.TeacherResponse;
import com.education.ai.model.dto.StudentResponse;
import com.education.ai.model.dto.AdminResponse;

/**
 * 认证服务接口
 */
public interface AuthService {
    
    /**
     * 用户注册
     * 
     * @param registerRequest 注册请求
     * @return 用户信息
     */
    Object register(RegisterRequest registerRequest);
    
    /**
     * 用户登录
     * 
     * @param loginRequest 登录请求
     * @return 用户信息
     */
    Object login(LoginRequest loginRequest);
    
    /**
     * 根据姓名查找教师
     * 
     * @param name 教师姓名
     * @return 教师信息
     */
    TeacherResponse findTeacherByName(String name);
    
    /**
     * 根据姓名查找学生
     * 
     * @param name 学生姓名
     * @return 学生信息
     */
    StudentResponse findStudentByName(String name);
    
    /**
     * 根据姓名查找管理员
     * 
     * @param name 管理员姓名
     * @return 管理员信息
     */
    AdminResponse findAdminByName(String name);
    
    /**
     * 修改密码
     * 
     * @param userId 用户ID
     * @param role 用户角色
     * @param request 修改密码请求
     */
    void changePassword(String userId, String role, ChangePasswordRequest request);
    
    /**
     * 根据用户ID获取用户信息
     * 
     * @param userId 用户ID
     * @param role 用户角色
     * @return 用户信息
     */
    Object getUserById(String userId, String role);
    
    /**
     * 生成令牌
     * 
     * @param userId 用户ID
     * @param role 用户角色
     * @return 令牌
     */
    String generateToken(String userId, String role);
    
    /**
     * 从令牌中获取用户ID
     * 
     * @param token 令牌
     * @return 用户ID
     */
    String getUserIdFromToken(String token);
    
    /**
     * 从令牌中获取用户角色
     * 
     * @param token 令牌
     * @return 用户角色
     */
    String getRoleFromToken(String token);
    
    /**
     * 退出登录
     * 
     * @param userId 用户ID
     * @param role 用户角色
     */
    void logout(String userId, String role);

    /**
     * 根据教师ID获取教师信息
     * 
     * @param teacherId 教师ID
     * @return 教师信息
     */
    TeacherResponse getTeacherById(String teacherId);
} 